package com.fwx.basic.inner_class;

/**
 * @author : fengwenxiang
 * @date : 2022/5/14 13:58
 * @description：静态内部类(也叫嵌套类)
 */
public class OuterClass_StaticInner {
    private int outerVar = 1;
    private int commonVar = 2;
    private static int outerStaticVar = 3;

    static{
        System.out.println("外部类中的静态代码块被执行了。。。");
    }

    public void outerMethod(){
        System.out.println("我是外部类的outerMethod方法");
    }
    public static void outerStaticMethod(){
        System.out.println("我是外部类的outerStaticMethod方法");
    }
    /**静态内部类**/
    public static class StaticInner{
        private int innerVar = 11;
        private int commonVar = 22;
        private static int innerStaticVar = 33;

        static {
            System.out.println("内部类中的静态代码块被执行了...");
        }
        public void innerShow(){
            System.out.println("innerVar : "+innerVar);
            System.out.println("静态内部类默认访问自己的重名属性commonVar : "+commonVar);
            System.out.println("静态内部类直接访问外部类静态属性outerStaticVar : "+outerStaticVar);
            //不能像成员内部类那样直接访问外部类非静态属性，只能访问静态内容
            //System.out.println("静态内部类无法访问外部类非静态属性commonVar : "+OuterClass_StaticInner.this.commonVar);
            outerStaticMethod();
            //outerMethod();//静态内部类中的方法只能访问到外部类的static内容
        }
        public static void innerStaticShow(){
            outerStaticMethod();
            System.out.println("outerStaticVar : "+outerStaticVar);
            //outerMethod();//静态内部类中的方法只能访问到外部类的static内容
        }
    }
    public void callInner(){
        StaticInner.innerStaticShow();
        System.out.println(StaticInner.innerStaticVar);
    }
}
